package com.zjl.redis.第13章_缓存双写一致性;

/**
 * 为了实现 redis和mysql的 强一致性，使用了 canal
 * https://github.com/alibaba/canal/wiki
 * canal [ka'nael], 译意为水道/管道/沟渠，
 * 主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费早期阿里巴巴因为杭州和美国双机房部署，
 * 存在跨机房同步的业务需求，实现方式主要是基于业务trigger获取增量变更。
 * 从2010年开始，业务逐步尝试数据库日志解析获取增量变更进行同步，
 * 由此衍生出了大量的数据库增量订阅和消费业务。
 *
 * 基于日志增量订阅和消费的业务包括
 *      ●数据库镜像
 *      ●数据库实时备份
 *      ●索引构建和实时维护(拆分异构索引、倒排索引等)
 *      ●业务cache刷新
 *      ●带业务逻辑的增量数据处理
 * 当前的canal支持源端MySQL版本包括5.1.x, 5.5.x, 5.6.x, 5.7.x, 8.0.x
 *
 * canal 能力
 *    数据库镜像
 *    数据库实时备份
 *    索引构建和实时维护(拆分异构索引、倒排索引等)
 *    业务cache刷新
 *    带业务逻辑的增量数据处理
 *
 *
 *
 * MySQL主备复制原理
 *      MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events，
 *                          可以通过 show binlog events 进行查看)
 *      MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
 *      MySQL slave 重放 relay log 中事件，将数据变更反映它自己的数据
 *
 * canal 工作原理
 *      canal 模拟 MySQL slave 的交互协议，伪装自己为 MySQL slave ，向 MySQL master 发送dump 协议
 *      MySQL master 收到 dump 请求，开始推送 binary log 给 slave (即 canal )
 *      canal 解析 binary log 对象(原始为 byte 流)
 *
 *
 *
 */
public class E1_canal简介 {
    public static void main(String[] args) {

    }
}
